package src.test;

import java.io.IOException;
import com.ghgande.j2mod.modbus.facade.ModbusSerialMaster;
import com.ghgande.j2mod.modbus.procimg.Register;
import com.ghgande.j2mod.modbus.procimg.SimpleRegister;
import com.ghgande.j2mod.modbus.util.SerialParameters;

/**
 * ClassName: ModbusRTUMaster
 * Package: test
 * Description:
 *
 * @Author BuTang
 * @Create 2025/1/15 14:33
 * @Version 1.0
 */
public class ModbusRTUMaster {
    public void demoModbus(){
        /**
         * 串口参数配置
         *  根据实际修改串口
         *  波特率
         *  数据位
         *  校验位
         *  停止位
         *  使用RTU协议
         */
        SerialParameters params = new SerialParameters();
        params.setPortName("COM1");
        params.setBaudRate(115200);
        params.setDatabits(8);
        params.setParity("None");
        params.setStopbits(1);
        params.setEncoding("RTU");

        try {
            // 创建ModbusRTU主站,设置超时时间
            ModbusSerialMaster master = new ModbusSerialMaster(params);
            master.setTimeout(200);

            // 连接到Modbus从站
            master.connect();

            // 下发03报文
            Register[] registers = master.readMultipleRegisters(1, 0, 3);

            // 下发06报文
            Register register = new SimpleRegister(2);
            int i = master.writeSingleRegister(1, 0, register);

            // 下发16报文
            Register[] batch = new Register[2];
            batch[0] = new SimpleRegister(12);
            batch[1] = new SimpleRegister(13);
            int i1 = master.writeMultipleRegisters(1, 0, batch);

            // 断开连接
            master.disconnect();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (Exception e) {
            throw new RuntimeException(e);
        }

    }
    public static void main(String[] args) {
        /**
         * 串口参数配置
         *  根据实际修改串口
         *  波特率
         *  数据位
         *  校验位
         *  停止位
         *  使用RTU协议
          */
        SerialParameters params = new SerialParameters();
        params.setPortName("COM1");
        params.setBaudRate(115200);
        params.setDatabits(8);
        params.setParity("None");
        params.setStopbits(1);
        params.setEncoding("RTU");

        try {
            // 创建ModbusRTU主站,设置超时时间
            ModbusSerialMaster master = new ModbusSerialMaster(params);
            master.setTimeout(200);

            // 连接到Modbus从站
            master.connect();

            // 下发03报文
            Register[] registers = master.readMultipleRegisters(1, 0, 3);

            // 下发06报文
            Register register = new SimpleRegister(2);
            int i = master.writeSingleRegister(1, 0, register);

            // 下发16报文
            Register[] batch = new Register[2];
            batch[0] = new SimpleRegister(12);
            batch[1] = new SimpleRegister(13);
            int i1 = master.writeMultipleRegisters(1, 0, batch);

            // 断开连接
            master.disconnect();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
}
